package com.hxzy.common.util;

import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import com.hxzy.common.constans.RedisConstans;
import com.hxzy.common.enums.AckCode;
import com.hxzy.controller.vue.login.resp.AdminLoginResp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;

/**
 * @Author wy
 * @Description jwt令牌处理
 * @Date 2023/8/29 11:34
 * @Version 1.0
 */

public interface JwtTokenService<T> {
    /**
     * 后台map存储对象的key
     */
    String  UUID_KEY="uuid";

    /**
     * 用户id
     */
    String USER_ID="id";

    /**
     * 后台用户类型的key
     */
    String USER_TYPE="user_type";

    String ADMIN="admin";

    String MERCHANDISER="merchandiser";

    /**
     * JWT密钥
     */
    String JWT_SECURITY="jfsalkdjfwruw2r3095u3gdlkfmaguirnadgiae0iw0wtuq3093482";


    /**
     * 创建令牌
     *
     * @param resp 用户信息
     * @return 令牌
     */
     String createJwtToken(T resp);

    /**
     * 验证后台令牌有效期，相差不足20分钟，自动刷新缓存
     *
     * @param resp
     * @return 令牌
     */
    void verifyToken(T resp);

    /**
     * 把数据存储到redis中
     *
     * @param resp 登录信息
     */
     void refreshToken(T resp);


    /**
     * 获取用户身份信息
     *
     * @return 用户信息
     */
    T getLoginResp(String jwtToken);


    /**
     * 从redis中移出用户身份信息
     */
     void delLoginUser( T resp);

    /**
     * 得到redisKey
     * @param type
     * @param value
     * @return
     */
    String getReidsKey(String type,String value);
}
